﻿namespace MobileTrack.Web.ViewModels
{
    using System;
    using System.Globalization;
    using System.Security.Principal;
    using MobileTrack.Core;
    using MobileTrack.Core.Model;

    public class CelularViewModel
    {
        public CelularViewModel(Celular celular, IPrincipal loggedUser)
        {
            if (celular == null)
            {
                throw new ArgumentNullException("celular");
            }

            if (loggedUser == null)
            {
                throw new ArgumentNullException("loggedUser");
            }

            Seguimiento seguimiento = celular.LastSeguimiento;

            this.Id = celular.Id;
            this.Imei = celular.Imei;
            this.ImeiLink = GetImei(celular.Imei);
            this.Producto = celular.Descripcion;
            this.Ingreso = celular.FechaIngreso.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);
            this.Operador = celular.Marca.EsOperador ? celular.Marca.Nombre : "Liberado";
            this.Estado = ModelHelper.ToString(seguimiento.Estado);
            this.Ubicacion = seguimiento.Sucursal.DisplayName;
            this.Comprobante = seguimiento.Comprobante;
            this.Comandos = GetComandos(celular.Id, seguimiento, loggedUser);
        }

        public long Id { get; set; }

        public long? Imei { get; set; }

        public string ImeiLink { get; set; }

        public string Producto { get; set; }

        public string Ingreso { get; set; }

        public string Operador { get; set; }

        public string Estado { get; set; }

        public string Ubicacion { get; set; }

        public string Comprobante { get; set; }

        public string Comandos { get; set; }

        private static string GetImei(long? imei)
        {
            if (imei == null)
            {
                return string.Empty;
            }

            return string.Format(CultureInfo.InvariantCulture, "<a href=\"Seguimientos?imei={0}\">{0}</a>", imei);
        }

        private static string GetComandos(long id, Seguimiento seguimiento, IPrincipal loggedUser)
        {
            string commands = string.Empty;
            string sucursalRole = string.Concat(seguimiento.Sucursal.Nombre, Constants.SucursalRoleSuffix);
            switch (seguimiento.Estado)
            {
                case MobileTrack.Core.Model.Estado.Pendiente:
                    if (loggedUser.IsInRole(Constants.AdministradorRole) 
                        || loggedUser.IsInRole(Constants.AsocianteRole))
                    {
                        commands = string.Format(CultureInfo.InvariantCulture, "<a href=\"#\" onclick=\"imeiDialog({0})\">IMEI</a>", id);
                    }

                    break;
                case MobileTrack.Core.Model.Estado.EnDeposito:
                    if (loggedUser.IsInRole(Constants.AdministradorRole)
                        || (loggedUser.IsInRole(Constants.DespachanteRole) && loggedUser.IsInRole(sucursalRole)))
                    {
                        commands = string.Format(CultureInfo.InvariantCulture, "<a href=\"#\" onclick=\"sendImeiDialog({0})\">Envio</a>", id);
                    }

                    break;
                case MobileTrack.Core.Model.Estado.EnTransito:
                    if (loggedUser.IsInRole(Constants.AdministradorRole)
                        || (loggedUser.IsInRole(Constants.ReceptorRole) && loggedUser.IsInRole(sucursalRole)))
                    {
                        commands = string.Format(CultureInfo.InvariantCulture, "<a href=\"#\" onclick=\"receiveImeiDialog({0})\">Recepcion</a>", id);
                    }

                    break;
                case MobileTrack.Core.Model.Estado.DisponibleVenta:
                    if (loggedUser.IsInRole(Constants.AdministradorRole)
                        || (loggedUser.IsInRole(Constants.DespachanteRole) && loggedUser.IsInRole(sucursalRole)))
                    {
                        commands = string.Format(CultureInfo.InvariantCulture, "<a href=\"#\" onclick=\"sendImeiDialog({0})\">Envio</a>", id);
                    }

                    if (loggedUser.IsInRole(Constants.AdministradorRole)
                        || (loggedUser.IsInRole(Constants.VendedorRole) && loggedUser.IsInRole(sucursalRole)))
                    {
                        var sellCommand = string.Format(CultureInfo.InvariantCulture, "<a href=\"#\" onclick=\"sellImeiDialog({0})\">Venta</a>", id);

                        commands = string.IsNullOrWhiteSpace(commands)
                            ? sellCommand
                            : string.Format(CultureInfo.InvariantCulture, "{0} | {1}", commands, sellCommand);
                    }

                    break;
                case MobileTrack.Core.Model.Estado.Vendido:
                    if (loggedUser.IsInRole(Constants.AdministradorRole)
                        || (loggedUser.IsInRole(Constants.VendedorRole) && loggedUser.IsInRole(sucursalRole)))
                    {
                        commands = string.Format(CultureInfo.InvariantCulture, "<a href=\"#\" onclick=\"returnImeiDialog({0})\">Devolucion</a>", id);
                    }
                    
                    break;
                default:
                    commands = string.Empty;
                    break;
            }

            return commands;
        }
    }
}